package com.ssy.lingxi.purchase.model.enums;

import com.ssy.lingxi.common.language.LanguageHolder;
import com.ssy.lingxi.message.api.constant.MessageTemplateCode;
import com.ssy.lingxi.report.api.enums.PurchaseOrderOperateTypeEnum;

/**
 * 请购单内部状态枚举
 * @author wyx
 * @version 2.0.0
 * @date 2021-11-01
 */
public enum RequisitionInnerStatusEnum {
    /**
     * 请购单：（请购单）待提交审核 - 1
     */
    BUYER_TO_SUBMIT_VALIDATE(1, "待提交审核", PurchaseOrderOperateTypeEnum.TO_BE_VALIFY_COMMIT.getCode(), MessageTemplateCode.procurement_order_wait_audit),

    /**
     * 请购单：待一级审核 - 2
     */
    BUYER_VALIDATE_GRADE_ONE(2, "待审核(一级)", PurchaseOrderOperateTypeEnum.TO_BE_VALIFY_STEP1.getCode(), MessageTemplateCode.procurement_order_audit_step_1),

    /**
     * 请购单：一级审核不通过 - 3
     */
    BUYER_GRADE_ONE_NOT_PASSED(3, "审核不通过(一级)", 0, MessageTemplateCode.procurement_order_audit_result),

    /**
     * 请购单：待二级审核 - 4
     */
    BUYER_VALIDATE_GRADE_TWO(4, "待审核(二级)", PurchaseOrderOperateTypeEnum.TO_BE_VALIFY_STEP2.getCode(), MessageTemplateCode.procurement_order_audit_step_2),

    /**
     * 请购单：二级审核不通过 - 5
     */
    BUYER_GRADE_TWO_NOT_PASSED(5, "审核不通过(二级)", 0, MessageTemplateCode.procurement_order_audit_result),

    /**
     * 请购单：待提交 - 6
     */
    BUYER_TO_SUBMIT(6, "待提交", PurchaseOrderOperateTypeEnum.TO_BE_COMMIT.getCode(), MessageTemplateCode.procurement_order_submit),

    /**
     * 请购单：已提交 - 7
     */
    BUYER__SUBMITTED(7, "已提交", 0, ""),

    /**
     * 请购单：已完成 - 1000
     */
    ACCOMPLISHED(1000, "已完成", 0, ""),

    /**
     * 请购单：已取消 - 1001
     */
    CANCELLED(1001, "已取消", 0, ""),

    /**
     * 请购单：已中止 - 1002
     */
    TERMINATED(1002, "已中止", 0, "");


    RequisitionInnerStatusEnum(Integer code, String name, Integer reportTypeCode, String messageCode) {
        this.code = code;
        this.reportTypeCode = reportTypeCode;
        this.messageCode = messageCode;
    }

    /**
     * 状态值
     */
    private Integer code;

    /**
     * 向报表服务发送数据请求的code，对应 PurchaseOrderOperateTypeEnum
     */
    private Integer reportTypeCode;

    /**
     * 向消息服务发送数据请求的code，对应 MessageTemplateCode
     */
    private String messageCode;

    public Integer getCode() {
        return code;
    }

    public String getName() {
        return LanguageHolder.getName(RequisitionInnerStatusEnum.class, this.code);
    }

    public Integer getReportTypeCode() {
        return reportTypeCode;
    }

    public String getMessageCode() {
        return messageCode;
    }

    /**
     * 根据枚举值获得状态名称
     * @param code 枚举值
     * @return 状态名称
     */
    public static String getNameByCode(Integer code) {
        return LanguageHolder.getName(RequisitionInnerStatusEnum.class, code);
    }
}
